﻿using System.Collections.Generic;
using Newtonsoft.Json;
using XUCore.WeChat.Apis.Sns;

namespace XUCore.WeChat.Enterprise.Apis.Member
{
    public class MemberInfoResult
    {
        /// <summary>
        /// 外部联系人的userid
        /// </summary>
        [JsonProperty("external_userid")]
        public string external_userid { get; set; }

        /// <summary>
        /// 外部联系人的名称[注1]
        /// </summary>
        [JsonProperty("name")]
        public string name { get; set; }

        /// <summary>
        /// 外部联系人的职位，如果外部企业或用户选择隐藏职位，则不返回，仅当联系人类型是企业微信用户时有此字段
        /// </summary>
        [JsonProperty("position")]
        public string position { get; set; }

        /// <summary>
        /// 外部联系人头像，代开发自建应用需要管理员授权才可以获取，第三方不可获取，上游企业不可获取下游企业客户该字段
        /// </summary>
        [JsonProperty("avatar")]
        public string avatar { get; set; }

        /// <summary>
        /// 外部联系人所在企业的简称，仅当联系人类型是企业微信用户时有此字段
        /// </summary>
        [JsonProperty("corp_name")]
        public string corp_name { get; set; }

        /// <summary>
        /// 外部联系人所在企业的主体名称，仅当联系人类型是企业微信用户时有此字段。仅企业自建应用可获取；第三方应用、代开发应用、上下游应用不可获取，返回内容为企业名称，即corp_name。
        /// </summary>
        [JsonProperty("corp_full_name")]
        public string corp_full_name { get; set; }

        /// <summary>
        /// 外部联系人的类型，1表示该外部联系人是微信用户，2表示该外部联系人是企业微信用户
        /// </summary>

        [JsonProperty("type")]
        public int type { get; set; }

        /// <summary>
        /// 外部联系人性别 0-未知 1-男性 2-女性。第三方不可获取，上游企业不可获取下游企业客户该字段，返回值为0，表示未定义
        /// </summary>
        [JsonProperty("gender")]
        public WeChatSexTypes gender { get; set; }

        /// <summary>
        /// 外部联系人在微信开放平台的唯一身份标识（微信unionid），通过此字段企业可将外部联系人与公众号/小程序用户关联起来。仅当联系人类型是微信用户，且企业绑定了微信开发者ID有此字段。查看绑定方法。第三方应用和代开发应用均不可获取，上游企业不可获取下游企业客户的unionid字段
        /// </summary>
        [JsonProperty("unionid")]
        public string unionid { get; set; }

        ///// <summary>
        ///// 外部联系人的自定义展示信息，可以有多个字段和多种类型，包括文本，网页和小程序，仅当联系人类型是企业微信用户时有此字段，字段详情见对外属性；
        ///// </summary>
        ///// <value></value>
        //[JsonProperty("external_profile")]
        //public ExternalProfile ExternalProfile { get; set; }

        [JsonProperty("follow_user")]
        public List<FollowUserInfoResult> follow_user { get; set; }
    }

    public class FollowUserInfoResult
    {
        /// <summary>
        /// 添加了此外部联系人的企业成员userid
        /// </summary>
        [JsonProperty("userid")]
        public string userid { get; set; }

        /// <summary>
        /// 该成员对此外部联系人的备注
        /// </summary>
        [JsonProperty("remark")]
        public string remark { get; set; }

        /// <summary>
        /// 该成员对此外部联系人的描述
        /// </summary>
        [JsonProperty("description")]
        public string description { get; set; }

        /// <summary>
        /// 该成员添加此外部联系人的时间
        /// </summary>
        [JsonProperty("createtime")]
        public long createtime { get; set; }

        /// <summary>
        /// 该成员对此微信客户备注的企业名称（仅微信客户有该字段）
        /// </summary>
        [JsonProperty("remark_corp_name")]
        public string remark_corp_name { get; set; }

        /// <summary>
        /// 该成员对此客户备注的手机号码，代开发自建应用需要管理员授权才可以获取，第三方不可获取，上游企业不可获取下游企业客户该字段
        /// </summary>
        [JsonProperty("remark_mobiles")]
        public List<string> remark_mobiles { get; set; }

        /// <summary>
        /// 该成员添加此客户的来源，具体含义详见来源定义
        /// 0	未知来源
        /// 1	扫描二维码
        /// 2	搜索手机号
        /// 3	名片分享
        /// 4	群聊
        /// 5	手机通讯录
        /// 6	微信联系人
        /// 8	安装第三方应用时自动添加的客服人员
        /// 9	搜索邮箱
        /// 10	视频号添加
        /// 11	通过日程参与人添加
        /// 12	通过会议参与人添加
        /// 13	添加微信好友对应的企业微信
        /// 14	通过智慧硬件专属客服添加
        /// 15	通过上门服务客服添加
        /// 16	通过获客链接添加
        /// 17	通过定制开发添加
        /// 18	通过需求回复添加
        /// 201	内部成员共享
        /// 202	管理员/负责人分配
        /// </summary>
        [JsonProperty("add_way")]
        public int add_way { get; set; }

        /// <summary>
        /// 该成员添加此客户的来源，具体含义详见来源定义
        /// </summary>
        [JsonProperty("wechat_channels")]
        public WechatChannelsInfoResult wechat_channels { get; set; }

        /// <summary>
        /// 发起添加的userid，如果成员主动添加，为成员的userid；如果是客户主动添加，则为客户的外部联系人userid；如果是内部成员共享/管理员分配，则为对应的成员/管理员userid
        /// </summary>
        [JsonProperty("oper_userid")]
        public string oper_userid { get; set; }

        /// <summary>
        /// 企业自定义的state参数，用于区分客户具体是通过哪个「联系我」或获客链接添加；由企业通过创建「联系我」或在获客链接中添加customer_channel参数进行指定
        /// </summary>
        [JsonProperty("state")]
        public string state { get; set; }

        /// <summary>
        /// 该成员添加此客户的来源，具体含义详见来源定义
        /// </summary>
        [JsonProperty("tags")]
        public List<TagInfoResult> tags { get; set; }
    }

    public class TagInfoResult
    {

        /// <summary>
        /// 该成员添加此外部联系人所打标签的分组名称（标签功能需要企业微信升级到2.7.5及以上版本）
        /// </summary>
        [JsonProperty("group_name")]
        public string group_name { get; set; }

        /// <summary>
        /// 该成员添加此外部联系人所打标签名称
        /// </summary>
        [JsonProperty("tag_name")]
        public string tag_name { get; set; }

        /// <summary>
        /// 该成员添加此外部联系人所打企业标签的id，用户自定义类型标签（type=2）不返回
        /// </summary>
        [JsonProperty("tag_id")]
        public string tag_id { get; set; }

        /// <summary>
        /// 该成员添加此外部联系人所打标签类型, 1-企业设置，2-用户自定义，3-规则组标签（仅系统应用返回）
        /// </summary>
        [JsonProperty("type")]
        public int type { get; set; }
    }

    public class WechatChannelsInfoResult
    {
        /// <summary>
        /// 视频号名称
        /// </summary>
        [JsonProperty("nickname")]
        public string nickname { get; set; }

        /// <summary>
        /// 视频号添加场景，0-未知 1-视频号主页 2-视频号直播间 3-视频号留资服务（微信版本要求：iOS ≥ 8.0.20，Android ≥ 8.0.21，且添加时间不早于2022年4月21日。否则添加场景值为0）
        /// </summary>
        [JsonProperty("source")]
        public int source { get; set; }
    }
}
